怎么用Java读取文件统计返回文件中包含的出现频率最高的3个Java关键字

您所在的位置:网站首页 integer java关键字 怎么用Java读取文件统计返回文件中包含的出现频率最高的3个Java关键字

怎么用Java读取文件统计返回文件中包含的出现频率最高的3个Java关键字

2022-05-15 23:52| 来源: 网络整理| 查看: 265

怎么用Java读取文件统计返回文件中包含的出现频率最高的3个Java关键字 发布时间:2021-07-09 09:15:07 来源:亿速云 阅读:129 作者:chen 栏目:编程语言

这篇文章主要介绍“怎么用Java读取文件统计返回文件中包含的出现频率最高的3个Java关键字”,在日常操作中,相信很多人在怎么用Java读取文件统计返回文件中包含的出现频率最高的3个Java关键字问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Java读取文件统计返回文件中包含的出现频率最高的3个Java关键字”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

前言

昨天帮助还在读大学的朋友做一道Java题,记录下来。题目大致的意思是 统计返回文件中包含的出现频率最高的3个Java关键字

 程序设计思路

读取文件肯定要用到 io 获取到文本的内容。

使用正则表达式读取到的文本是否是一个单词

判断得到的这个单词是否是java关键字

使用 TreeMap 暂存统计结果。key 是关键字 value 是出现的次数

对TreeMap的value进行降序排序,从而取出出现频率最高的java关键字。

 代码

主要讲解都在注释中

package com.ioword; import com.alibaba.fastjson.JSON; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; /**  * 统计返回文件中包含的出现频率最高的3个Java关键字  *  * @author lishuzhen  * @date 2021/4/15  */ public class MyStatistic {     /**      * 定义正则表达式匹配单词      */     private static Pattern PATTERN = Pattern.compile("[a-zA-Z]+");     /**      * Java常用关键字数组      */     private static String[] JAVA_KEYWORD_ARRAY = {"abstract", "assert", "boolean", "break", "byte", "case", "catch", "char", "class", "const", "continue", "default", "do", "double", "else", "extends", "false", "final", "finally", "float", "for", "goto", "if", "implements", "import", "instanceof", "int", "interface", "long", "native", "new", "null", "package", "private", "protected", "public", "return", "short", "static", "strictfp", "super", "switch", "synchronized", "this", "throw", "throws", "transient", "true", "try", "void", "volatile", "while"};     /**      * 返回结果为文件中包含的出现频率最高的3个Java关键字      *      * @param filePath      * @return      * @throws IOException      */     public String[] topJavaWords(String filePath) throws IOException {         // 读取文件         String str = readFileToString(filePath);         // 使用正则表达式,判断是否是一个单词         Matcher matcher = PATTERN.matcher(str);         // 统计关键字出现的次数         Map map = timesKeyWord(matcher);         System.out.println("统计结果 ->" + map);         // 对统计结果排序         List sortList = sort(map);         return top(sortList, 3);     }     /**      * 读取文件      *      * @return      */     public static String readFileToString(String filePath) {         String str = null;         try {             BufferedReader reader = new BufferedReader(new FileReader(filePath));             StringBuffer buffer = new StringBuffer();             String line = null;             while ((line = reader.readLine()) != null) {                 buffer.append(line);             }             reader.close();             // 整个文件的内容 转成 String 类型             str = buffer.toString();         } catch (IOException e) {             e.printStackTrace();         }         return str;     }     /**      * 判断是否是Java关键字      *      * @param keyword      * @return      */     public static boolean isJavaKeyWord(String keyword) {         return (Arrays.binarySearch(JAVA_KEYWORD_ARRAY, keyword) >= 0);     }     /**      * 统计关键字出现的次数      *      * @param matcher      * @return      */     public static Map timesKeyWord(Matcher matcher) {         // 用一个集合存放统计结果 key = 关键字 value = 出现的次数         Map map = new TreeMap();         String word = "";         // 出现次数 默认第一次         int times = 1;         while (matcher.find()) {             word = matcher.group();             System.out.println("拿到单词 -> " + word);             // 判断是否使java关键字             if (isJavaKeyWord(word)) {                 System.out.println(word + " 是关键字");                 // 如果包含该键,单词出现过                 if (map.containsKey(word)) {                     // 得到单词出现的次数                     times = map.get(word);                     // 出现的次数 + 1                     map.put(word, times + 1);                 } else {                     // 否则单词第一次出现,添加到集合中,出现次数 = 1                     map.put(word, times);                 }             }         }         return map;     }     /**      * 排序      *      * @param map      * @return      */     public static List sort(Map map) {         List list = new ArrayList(map.entrySet());         Collections.sort(list, new Comparator() {             //降序排列             public int compare(Map.Entry o1, Map.Entry o2) {                 return o2.getValue().compareTo(o1.getValue());             }         });         return list;     }     /**      * 获取出现次数高的关键字数组      *      * @param list      * @param topNum      * @return      */     public static String[] top(List list, int topNum) {         String[] result = new String[topNum];         for (int i = 0; i 


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3